package com.h2cloud.aspect.ThreadLockCache;

import java.lang.annotation.*;

/**
 * 本地线程缓存
 * 标注了这个注解的方法返回值将会被缓存
 * 接口请求结束后自动销毁
 * @author xp7
 *
 */
@Documented
@Target({ ElementType.METHOD,ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface ThreadLocalCacheable {

    /**
     * 缓存key,支持自定义
     * 如果没有设置使用默认方式
     * 自定义key+请求参数
     * @return
     */
    String key() default "";

    /**
     * 自定义缓存参数名称
     *
     * 举例：
     * 原来"缓存注解方法"中无意义或重复的参数过多，可以仅保留需要的参数即可 processInstanceId
     *     @Cacheable(key = "getRecordByProcessInstanceId", paramName = {"processInstanceId"})
     *     public WorkflowRecordIndex getRecordByProcessInstanceId(String processInstanceId,String a ,String b ,String c...) {
     *         ...
     *     }
     *
     * @return {@link String[]}
     */
    String[] paramName() default {};
}
